package org.corespring.restaurant.dao.hibernate;

import java.util.List;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;
import org.corespring.restaurant.dao.PlatoDao;
import org.corespring.restaurant.model.Categoria;
import org.corespring.restaurant.model.Plato;
import org.corespring.restaurant.model.Tipo;

@Repository
public class PlatoDaoHibernate extends HibernateDaoSupport implements PlatoDao {

    @Autowired
    public PlatoDaoHibernate(SessionFactory sessionFactory) {
        setSessionFactory(sessionFactory);
    }

    @Override
    public List<Plato> obtenerListaPlatos() {
        List list = getHibernateTemplate().find(" from Plato ");
        return list;
    }

    @Override
    public Plato obtenerPlatoById(String idPlato) {
        Plato plato = getHibernateTemplate().get(Plato.class, idPlato);
        return plato;
    }

    @Override
    public void guardarPlato(Plato plato) {
        getHibernateTemplate().saveOrUpdate(plato);
        getHibernateTemplate().flush();
    }

    @Override
    public void actualizarPlato(Plato plato) {
        guardarPlato(plato);
    }

    @Override
    public void eliminarPlato(String idPlato) {
        Plato plato = obtenerPlatoById(idPlato);
        getHibernateTemplate().delete(plato);
    }

    @Override
    public List<Categoria> obtenerCategorias() {
        List list = getHibernateTemplate().find(" from Categoria ");
        return list;
    }
    @Override
    public List<Tipo> obtenerTipos() {
        List list = getHibernateTemplate().find(" from Tipo ");
        return list;
    }

    @Override
    public List<Plato> obtenerListaPlatos(Plato oPlato) {
        StringBuilder query = new StringBuilder("from Plato m where 1 = 1 ");

        if (oPlato.getNomplato() != null
                && !oPlato.getNomplato().isEmpty()) {
            query.append(" and upper(m.nomplato) like '%").append(oPlato.getNomplato().toUpperCase()).append("%'");
        }

        return getHibernateTemplate().find(query.toString());
    }
    @Override
    public List<Plato> obtenerListaPlatosNoSeleccionados(String ids) {
        String sql="";
        if(ids.equals("")) sql = " from Plato  ";
        else sql = " from Plato where idplato not in (" + ids + ") ";
        List list = getHibernateTemplate().find(sql);
        return list;
    }

}